/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package controlador;

import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import modelo.DAO.PujaDAO;
import modelo.DAO.UsuarioDAO;
import modelo.facade.PujaServicios;
import modelo.vo.Puja;
import modelo.vo.Subasta;
import modelo.vo.Usuario;

/**
 *
 * @author carlos
 */
public class ControladorPuja
{
     private static ControladorPuja controladorPuja;
    private PujaServicios pujaServicios;
    //private DefaultTableModel modelo;
    
    ///patron singleton
    public static ControladorPuja getInstance()
    {
        if(controladorPuja==null)
        {
            return (new ControladorPuja());
        }
        return controladorPuja;
    }

     
    
    
    public Boolean btnAgregar(Puja puja)
    {
       // try {
            if(puja!=null)
            {
                pujaServicios=new PujaServicios(puja);
                if(comparEfectivo(puja))
                {
                    if(comporarPropietario(puja))
                    {
                        if(comporarValor(puja))
                        {
                            pujaServicios.grabar();
                        }
                        else
                        {
                            JOptionPane.showMessageDialog(null,"El valor es inferior a la maxima puja");
                        }
                    }
                    else
                    {
                        JOptionPane.showMessageDialog(null,"El usuario es el mismo propietario");
                    }
                }
                else
                {
                    JOptionPane.showMessageDialog(null,"Saldo insuficiente");
                }
                return true;
            }
       // } catch (Exception e) 
       // {
        //    return false;
       // }
        return false;
    }
    
    public boolean comparEfectivo(Puja puja)
    {
        Usuario usuario=puja.getUsuario();
        if(usuario.getCredito()>puja.getCantidad())
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public boolean comporarPropietario(Puja puja)
    {
        if(!puja.getSubasta().getPropietario().equals(puja.getUsuario()))
        {
            return true;
        }
        else
        {
            return false;
        }
                
    }
    
    public void  finalizarPuja(Puja puja)
    {
        puja.getSubasta().setEstado("cerrado");
        (new PujaDAO(puja)).editar();
        Usuario usuario=puja.getUsuario();
        usuario.setCredito(usuario.getCredito()-puja.getCantidad());
        (new UsuarioDAO(usuario)).editar();
        JOptionPane.showMessageDialog(null,"La puja finalizo correctamente");
    }
    
    public boolean comporarValor(Puja puja)
    {
        ArrayList lista=(new PujaDAO(null)).lista();
        float mayor=-9999;
        for (Iterator it = lista.iterator(); it.hasNext();) 
        {
            Puja object =(Puja)it.next();
            if(puja.getCantidad()>mayor && puja.getSubasta().equals(object.getSubasta()))
            {
                mayor=puja.getCantidad();
            }
        }
        
        if(puja.getCantidad()>mayor)
        {
            return true;
        }
        else
        {
            return false;
        }
                
        
    }
    
    public Boolean btnEditar(Puja puja)
    {
        //try {
            if(puja!=null)
            {
                pujaServicios=new PujaServicios(puja);
                pujaServicios.editar();
                return true;
            }
       // } catch (Exception e) 
       // {
        //    return false;
       // }
        return false;
    }
    
    public DefaultTableModel getModelo()//convertiento a modelo para mostrar directo
    {
        String titulo[]=new String[4];
        titulo[0]="codigoPuja";
        titulo[1]="nombreProducto";
        titulo[2]="nombreOfertante";
        titulo[3]="cantidad";
        DefaultTableModel modelo=new DefaultTableModel(titulo,0);
        ArrayList lista=(new PujaServicios(null)).getLista(); //me duevuelve la lista de los datos en un arrayList
        for (Iterator it = lista.iterator(); it.hasNext();) {
            Puja puja =(Puja)it.next();
            String datos[]=new String[4];
            datos[0]=puja.getCodPuja()+"";
            datos[1]=puja.getSubasta().getNombreProducto();
            datos[2]=puja.getUsuario().getUsuario();
            datos[3]=puja.getCantidad()+"";
            modelo.addRow(datos);
        }
        return modelo;
        
    }
    
    public DefaultTableModel getModelo(String nombreProducto)//convertiento a modelo para mostrar directo
    {
        String titulo[]=new String[4];
        titulo[0]="codigoPuja";
        titulo[1]="nombreProducto";
        titulo[2]="nombreOfertante";
        titulo[3]="cantidad";
        DefaultTableModel modelo=new DefaultTableModel(titulo,0);
        ArrayList lista=(new PujaServicios(null)).getLista(); //me duevuelve la lista de los datos en un arrayList
        for (Iterator it = lista.iterator(); it.hasNext();) {
            Puja puja =(Puja)it.next();
            if(puja.getSubasta().getNombreProducto().equals(nombreProducto))
            {
                String datos[]=new String[4];
                datos[0]=puja.getCodPuja()+"";
                datos[1]=puja.getSubasta().getNombreProducto();
                datos[2]=puja.getUsuario().getUsuario();
                datos[3]=puja.getCantidad()+"";
                modelo.addRow(datos);
            }
        }
        return modelo;
        
    }

    public boolean btnEliminar(Puja puja) {
        // try {
            if(puja!=null)
            {
                pujaServicios=new PujaServicios(puja);
                pujaServicios.eliminar();
                return true;
            }
       // } catch (Exception e) 
       // {
        //    return false;
       // }
        return false;
    }
}
